Non-Deterministic Finite Automata